///@file MVDataMBCommon.h 定义 CMVDataMBCommon 类

#ifndef _MVDATA_MB_COMMON_H_
#define _MVDATA_MB_COMMON_H_
#include "MVDataDefines.h"

///@brief 封装了Macro Block的通用属性和方法
class CMVDataMBCommon
{
	// TODO: remove friend
	friend class CMVDataAgent;
	friend class CMVDataAgentXML;

	// TODO: vs2008 bug?
	friend class CMVDataMB;
	friend class CMVDataBlock;
	friend class CMVDataSubMB;
	friend class CMVDataSubSubMB;

//============================== 一般方法 ====================================
protected:
	CMVDataMBCommon();
	CMVDataMBCommon( const CMVDataMBCommon& mb_common );
	~CMVDataMBCommon();

public:
	///@brief 复制内部所有的属性
	CMVDataMBCommon& operator = ( const CMVDataMBCommon & mb_common );

//============================== 属性方法 ====================================
public:
	///@brief 当前是否含有MB MV向量
	bool HaveMVCoordinate() const;
	///@brief 设置MB MV向量
	int SetMVCoordinate( int x, int y );
	///@brief 设置MB MV向量，从参数返回
	int GetMVCoordinate( int& x, int& y ) const;
	///@brief 取得MV向量X分量
	int GetMVCoordinateX() const;
	///@brief 取得MV向量Y分量
	int GetMVCoordinateY() const;

	///@brief 当前是否包含SAD属性
	bool HaveASAD() const;
	///@brief 设置Average SAD属性
	int SetASAD( int asad );
	///@brief 取得Average SAD属性
	int GetASAD() const;

	///@brief 当前是否包含SAD BitCount 属性
	bool HaveSADBitCount() const;
	///@brief 设置SAD BitCount 属性
	int SetSADBitCount( int bitcount );
	///@brief 取得SAD BitCount 属性
	int GetSADBitCount() const;

	///@brief 当前是否包含sub_mb_type 属性
	bool HaveSubMBType() const;
	///@brief 设置sub_mb_type 属性
	int SetSubMBType(TYPE_SUB_MB type);
	///@brief 取得当前sub_mb_type 属性
	TYPE_SUB_MB GetSubMBType() const;


//============================== 类成员 ====================================
protected:
	int m_iMVx;
	int m_iMVy;
	bool m_bMVSetted;

	int m_iASAD;
	bool m_bASADSetted;

	int m_iSADBitCount;
	bool m_bSADBitCountSetted;

	TYPE_SUB_MB m_eSubMBType;


};


#endif // _MVDATA_MB_COMMON_H_